"""
主模块负责用户输入和校验
letter模块负责接收字符串，将字符串中的非英文字符剔除
reverse模块负责将接收到的全英文字符反转
encode模块负责使用凯撒密码将已经反转的字符加密后输出
"""


def main():
    while True:
        password = input('请输入您的密码，我将对你的密码进行加密后输出，请包含字母:\n')
        if len(password) != 0 and password is not None:
            if len(password) <= 255:
                letter(password)
                break
            else:
                print('您的密码长度不能超过255')
        else:
            print('您的密码不能为空')


def letter(pwd):
    new_pwd = ''
    for item in pwd:
        if item.isalpha():
            new_pwd += item

    reverse(new_pwd)


def reverse(new_pwd):
    """不使用python自带的reversed，递归，实现字符串反转 """            
    length = len(new_pwd)
    if length == 0:
        raise ValueError('密码不能为空')
    reverse_new_pwd = ''
    for i in range(length - 1, -1, -1):
        reverse_new_pwd += new_pwd[i]
    encode(reverse_new_pwd)


def encode(reverse_new_pwd):
    # 使用凯撒密码加密，偏移量为3
    result = ''
    for char in reverse_new_pwd:
        if char.isupper():
            # 处理大写字母 A-Z (65-90) ord()将一个字符转换为unicode编码 chr()将一个unicode编码转换为字符
            result += chr((ord(char) - 65 + 3) % 26 + 65)
        else:
            # 处理小写字母 a-z (97-122)
            result += chr((ord(char) - 97 + 3) % 26 + 97)
    print(f'加密后的密码是：{result}')


main()
